package it.gestoreContratti.gui.panels;

import it.gestoreContratti.database.DatabaseController;
import it.gestoreContratti.database.exception.DatabaseConnectionException;
import it.gestoreContratti.database.exception.QueryException;
import it.gestoreContratti.entity.Contratto;
import it.gestoreContratti.entity.Specifica;
import it.gestoreContratti.gui.frames.ModificaContrattoFrame;
import it.gestoreContratti.gui.frames.NuovaSpecificaFrame;
import it.gestoreContratti.gui.frames.ProrogaContrattoFrame;
import it.gestoreContratti.gui.frames.VisualizzaContrattoFrame;
import it.gestoreContratti.gui.frames.VisualizzaSpecificheContrattoFrame;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Vector;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;

public class ContrattiScadenzaPanel extends JPanel {
	
	
	private static final long serialVersionUID = 5935061107124951858L;	
	private DatabaseController databaseController;	
	private Vector<Contratto> listaContratti;
	private Vector<Contratto> listaContrattiVisibili;
	private JPopupMenu azioni;
	private JMenuItem visualizzaMenuItem;
	private JMenuItem modificaMenuItem;
	private JMenuItem prorogaMenuItem;
	private JMenuItem eliminaMenuItem;
	private JMenuItem visualizzaSpecificheMenuItem;
	private JMenuItem inserisciSpecificaMenuItem;
	private TableContent tableContent;
	private JTextField ricercaTextField;
	private JTable table;
	private JComboBox ricercaComboBox;
	private JButton ricercaButton;
	private DateFormat dateFormat;
	private JLabel visualizzazioneLabel;
	private JTextField visualizzazioneTextField;
	private ContrattiScadenzaPanel pannello;

	/**
	 * Create the panel.
	 */
	public ContrattiScadenzaPanel(DatabaseController dbController) {
		addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				azioni.setVisible(false);
			}
		});		
		this.databaseController = dbController;
		this.pannello = this;
		dateFormat = new SimpleDateFormat("dd/MM/yyyy");
		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[]{102, 187, 184, 0};
		gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0};
		gridBagLayout.columnWeights = new double[]{1.0, 1.0, 1.0, 1.0};
		gridBagLayout.rowWeights = new double[]{0.0, 1.0, 0.0, 0.0, Double.MIN_VALUE};
		setLayout(gridBagLayout);
		
		
		JButton visualizzaScadenzeButton = new JButton("Visualizza contratti in scadenza");
		visualizzaScadenzeButton.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				
				try {
					listaContratti = databaseController.selectContrattiScadenza();
					listaContrattiVisibili = new Vector<Contratto>(listaContratti);
					table.setModel(new ContrattiTabelModel(listaContrattiVisibili));					
					table.validate();
					tableContent = TableContent.SCADENZE;
					ricercaButton.setEnabled(true);
					ricercaButton.validate();
					visualizzazioneTextField.setText("SOLO I CONTRATTI IN SCADENZA");
					visualizzazioneTextField.validate();
				} catch (DatabaseConnectionException e1) {
					JOptionPane.showMessageDialog(null, e1.getMessage(), "", JOptionPane.ERROR_MESSAGE);
				} catch (QueryException e1) {
					// TODO Auto-generated catch block
					JOptionPane.showMessageDialog(null, e1.getMessage(), "", JOptionPane.ERROR_MESSAGE);
				}
					
				
			}
		});
		
		JButton visualizzaTuttiButton = new JButton("Visualizza Tutti Contratti");		
		visualizzaTuttiButton.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				try {
					listaContratti = databaseController.selectContratti();
					listaContrattiVisibili = new Vector<Contratto>(listaContratti);
					table.setModel(new ContrattiTabelModel(listaContrattiVisibili));					
					table.validate();
					tableContent = TableContent.TUTTI;
					ricercaButton.setEnabled(true);
					ricercaButton.validate();
					visualizzazioneTextField.setText("TUTTI I CONTRATTI");
					visualizzazioneTextField.validate();
				} catch (DatabaseConnectionException e1) {
					JOptionPane.showMessageDialog(null, e1.getMessage(), "", JOptionPane.ERROR_MESSAGE);
				} catch (QueryException e1) {
					JOptionPane.showMessageDialog(null, e1.getMessage(), "", JOptionPane.ERROR_MESSAGE);
				}
			}
		});
		
		visualizzazioneLabel = new JLabel("Stai Visualizzando");
		GridBagConstraints gbc_visualizzazioneLabel = new GridBagConstraints();
		gbc_visualizzazioneLabel.anchor = GridBagConstraints.EAST;
		gbc_visualizzazioneLabel.insets = new Insets(0, 0, 5, 5);
		gbc_visualizzazioneLabel.gridx = 0;
		gbc_visualizzazioneLabel.gridy = 0;
		add(visualizzazioneLabel, gbc_visualizzazioneLabel);
		
		visualizzazioneTextField = new JTextField();
		visualizzazioneTextField.setEditable(false);
		GridBagConstraints gbc_visualizzazioneTextField = new GridBagConstraints();
		gbc_visualizzazioneTextField.gridwidth = 3;
		gbc_visualizzazioneTextField.insets = new Insets(0, 0, 5, 5);
		gbc_visualizzazioneTextField.fill = GridBagConstraints.HORIZONTAL;
		gbc_visualizzazioneTextField.gridx = 1;
		gbc_visualizzazioneTextField.gridy = 0;
		add(visualizzazioneTextField, gbc_visualizzazioneTextField);
		visualizzazioneTextField.setColumns(10);
		
		JScrollPane scrollPane = new JScrollPane();
		GridBagConstraints gbc_scrollPane = new GridBagConstraints();
		gbc_scrollPane.fill = GridBagConstraints.BOTH;
		gbc_scrollPane.gridwidth = 4;
		gbc_scrollPane.insets = new Insets(0, 0, 5, 0);
		gbc_scrollPane.gridx = 0;
		gbc_scrollPane.gridy = 1;
		add(scrollPane, gbc_scrollPane);
		
		
		
		table = new JTable();
		table.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				if(arg0.getButton() == MouseEvent.BUTTON3){
					JTable t = (JTable)arg0.getSource();										
					if(t.getSelectedRow() >=0){
						if(tableContent.compareTo(TableContent.SCADENZE) == 0){							
							azioni.setLocation(arg0.getXOnScreen(), arg0.getYOnScreen());
							azioni.setVisible(true);							
							azioni.validate();							
						}else{							
							azioni.setLocation(arg0.getXOnScreen(), arg0.getYOnScreen());
							azioni.setVisible(true);							
							azioni.validate();
						}	
					}
				}
				else{
					azioni.setVisible(false);
				}
			}
		});		
		scrollPane.setViewportView(table);		
		table.setModel(new ContrattiTabelModel());
		table.validate();
		
		
		scrollPane.setViewportView(table);
		GridBagConstraints gbc_visualizzaTuttiButton = new GridBagConstraints();
		gbc_visualizzaTuttiButton.fill = GridBagConstraints.HORIZONTAL;
		gbc_visualizzaTuttiButton.gridwidth = 2;
		gbc_visualizzaTuttiButton.insets = new Insets(0, 0, 5, 5);
		gbc_visualizzaTuttiButton.gridx = 0;
		gbc_visualizzaTuttiButton.gridy = 2;
		add(visualizzaTuttiButton, gbc_visualizzaTuttiButton);
		
		GridBagConstraints gbc_visualizzaScadenzeButton = new GridBagConstraints();
		gbc_visualizzaScadenzeButton.fill = GridBagConstraints.HORIZONTAL;
		gbc_visualizzaScadenzeButton.gridwidth = 2;
		gbc_visualizzaScadenzeButton.insets = new Insets(0, 0, 5, 0);
		gbc_visualizzaScadenzeButton.anchor = GridBagConstraints.SOUTH;
		gbc_visualizzaScadenzeButton.gridx = 2;
		gbc_visualizzaScadenzeButton.gridy = 2;
		add(visualizzaScadenzeButton, gbc_visualizzaScadenzeButton);
		
		JLabel ricercaLabel = new JLabel("Ricerca Per");
		GridBagConstraints gbc_ricercaLabel = new GridBagConstraints();
		gbc_ricercaLabel.anchor = GridBagConstraints.WEST;
		gbc_ricercaLabel.insets = new Insets(0, 0, 0, 5);
		gbc_ricercaLabel.gridx = 0;
		gbc_ricercaLabel.gridy = 3;
		add(ricercaLabel, gbc_ricercaLabel);
		
		ricercaComboBox = new JComboBox();
		ricercaComboBox.setModel(new DefaultComboBoxModel(RicercaContrattoField.values()));
		ricercaComboBox.setEditable(true);
		GridBagConstraints gbc_ricercaComboBox = new GridBagConstraints();
		gbc_ricercaComboBox.insets = new Insets(0, 0, 0, 5);
		gbc_ricercaComboBox.fill = GridBagConstraints.HORIZONTAL;
		gbc_ricercaComboBox.gridx = 1;
		gbc_ricercaComboBox.gridy = 3;
		add(ricercaComboBox, gbc_ricercaComboBox);
		ricercaComboBox.setSelectedItem(RicercaContrattoField.NUMERO);
		
		ricercaTextField = new JTextField();
		GridBagConstraints gbc_ricercaTextField = new GridBagConstraints();
		gbc_ricercaTextField.insets = new Insets(0, 0, 0, 5);
		gbc_ricercaTextField.fill = GridBagConstraints.HORIZONTAL;
		gbc_ricercaTextField.gridx = 2;
		gbc_ricercaTextField.gridy = 3;
		add(ricercaTextField, gbc_ricercaTextField);
		ricercaTextField.setColumns(10);
		
		ricercaButton = new JButton("Ricerca");
		ricercaButton.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				ricerca();				
			}
		});
		ricercaButton.setEnabled(false);
		GridBagConstraints gbc_ricercaButton = new GridBagConstraints();
		gbc_ricercaButton.anchor = GridBagConstraints.EAST;
		gbc_ricercaButton.gridx = 3;
		gbc_ricercaButton.gridy = 3;
		add(ricercaButton, gbc_ricercaButton);
		
		
		azioni = new JPopupMenu("AZIONI");
		azioni.setInvoker(this);
		visualizzaMenuItem = new JMenuItem("Visualizza");
		
		
		
		visualizzaMenuItem.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseReleased(MouseEvent arg0) {
				if(table.getSelectedRow() >=0){
					if(tableContent.compareTo(TableContent.SCADENZE) == 0){
						VisualizzaContrattoFrame visualizzaContrattoFrame= new VisualizzaContrattoFrame(listaContrattiVisibili.get(table.getSelectedRow()));				
						visualizzaContrattoFrame.setVisible(true);
						azioni.setVisible(false);
					}else{
						
						VisualizzaContrattoFrame visualizzaContrattoFrame= new VisualizzaContrattoFrame(listaContrattiVisibili.get(table.getSelectedRow()));				
						visualizzaContrattoFrame.setVisible(true);
						azioni.setVisible(false);
					}	
				}				
			}
		});
		modificaMenuItem = new JMenuItem("Modifica");
		modificaMenuItem.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseReleased(MouseEvent arg0) {
				if(table.getSelectedRow() >=0){
					if(tableContent.compareTo(TableContent.SCADENZE) == 0){						
						ModificaContrattoFrame modificaContrattoFrame;
						try {
							modificaContrattoFrame = new ModificaContrattoFrame(pannello);
							modificaContrattoFrame.setVisible(true);
							azioni.setVisible(false);
						} catch (DatabaseConnectionException e) {
							// TODO Auto-generated catch block
							azioni.setVisible(false);
							e.printStackTrace();
						} catch (QueryException e) {
							// TODO Auto-generated catch block
							azioni.setVisible(false);
							e.printStackTrace();
						}				
						
					}else{
						ModificaContrattoFrame modificaContrattoFrame;
						try {
							modificaContrattoFrame = new ModificaContrattoFrame(pannello);
							modificaContrattoFrame.setVisible(true);
							azioni.setVisible(false);
						} catch (DatabaseConnectionException e) {							
							azioni.setVisible(false);
							JOptionPane.showMessageDialog(null, e.getMessage(), "", JOptionPane.ERROR_MESSAGE);
							e.printStackTrace();
						} catch (QueryException e) {							
							azioni.setVisible(false);
							e.printStackTrace();
						}				
						
					}	
				}				
			}
		});
		prorogaMenuItem = new JMenuItem("Proroga");
		prorogaMenuItem.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseReleased(MouseEvent arg0) {
				if(table.getSelectedRow() >=0){
					if(tableContent.compareTo(TableContent.SCADENZE) == 0){
						ProrogaContrattoFrame prorogaContrattoFrame= new ProrogaContrattoFrame(pannello);				
						prorogaContrattoFrame.setVisible(true);
						azioni.setVisible(false);
					}else{
						ProrogaContrattoFrame prorogaContrattoFrame= new ProrogaContrattoFrame(pannello);				
						prorogaContrattoFrame.setVisible(true);
						azioni.setVisible(false);
					}	
				}				
			}
		});
		eliminaMenuItem = new JMenuItem("Elimina");
		eliminaMenuItem.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseReleased(MouseEvent arg0) {
				if(table.getSelectedRow() >=0){
					if(tableContent.compareTo(TableContent.SCADENZE) == 0){
						Contratto c = listaContrattiVisibili.get(table.getSelectedRow());
						int conferma = JOptionPane.showConfirmDialog(null, "Eliminianare il contratto Numero "+c.getNumero().toString()+" e tutte le specifiche associate?","", JOptionPane.YES_NO_OPTION);
						if(conferma == JOptionPane.OK_OPTION){
							try {
								databaseController.eliminaContratto(c);
								JOptionPane.showMessageDialog(null, "Contratto eliminato correttamente","", JOptionPane.WARNING_MESSAGE);
								azioni.setVisible(false);
								listaContrattiVisibili.remove(table.getSelectedRow());
								table.setModel(new ContrattiTabelModel(listaContrattiVisibili));
								table.validate();
							} catch (DatabaseConnectionException e) {
								JOptionPane.showMessageDialog(null,e.getMessage() , "", JOptionPane.WARNING_MESSAGE);
							} catch (QueryException e) {
								JOptionPane.showMessageDialog(null,e.getMessage() , "", JOptionPane.WARNING_MESSAGE);
							}							
						}						
					}else{
						Contratto c = listaContrattiVisibili.get(table.getSelectedRow());
						int conferma = JOptionPane.showConfirmDialog(null, "Eliminianare il contratto Numero "+c.getNumero().toString()+" e tutte le specifiche associate?","", JOptionPane.YES_NO_OPTION);
						if(conferma == JOptionPane.OK_OPTION){
							try {
								databaseController.eliminaContratto(c);
								JOptionPane.showMessageDialog(null, "Contratto eliminato correttamente","", JOptionPane.WARNING_MESSAGE);
								azioni.setVisible(false);
								listaContrattiVisibili.remove(table.getSelectedRow());
								table.setModel(new ContrattiTabelModel(listaContrattiVisibili));
								table.validate();
							} catch (DatabaseConnectionException e) {
								JOptionPane.showMessageDialog(null,e.getMessage() , "", JOptionPane.WARNING_MESSAGE);
							} catch (QueryException e) {
								JOptionPane.showMessageDialog(null,e.getMessage() , "", JOptionPane.WARNING_MESSAGE);
							}							
						}
					}	
				}				
			}
		});
		visualizzaSpecificheMenuItem = new JMenuItem("Visualizza Specifiche");
		visualizzaSpecificheMenuItem.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseReleased(MouseEvent arg0) {
				if(table.getSelectedRow() >=0){
					if(tableContent.compareTo(TableContent.SCADENZE) == 0){					
						VisualizzaSpecificheContrattoFrame visualizzaSpecificheContrattoFrame = new VisualizzaSpecificheContrattoFrame(pannello);
						visualizzaSpecificheContrattoFrame.setVisible(true);
						azioni.setVisible(false);
						
					}else{
						VisualizzaSpecificheContrattoFrame visualizzaSpecificheContrattoFrame = new VisualizzaSpecificheContrattoFrame(pannello);
						visualizzaSpecificheContrattoFrame.setVisible(true);
						azioni.setVisible(false);						
					}					
				}				
			}
		});
		
		inserisciSpecificaMenuItem = new JMenuItem("Inserisci Specifica");
		inserisciSpecificaMenuItem.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseReleased(MouseEvent arg0) {
				if(table.getSelectedRow() >=0){
					if(tableContent.compareTo(TableContent.SCADENZE) == 0){						
						NuovaSpecificaFrame nuovaSpecificaFrame = new NuovaSpecificaFrame(pannello, null);
						nuovaSpecificaFrame.setVisible(true);	
						azioni.setVisible(false);
					}else{						
						NuovaSpecificaFrame nuovaSpecificaFrame = new NuovaSpecificaFrame(pannello, null);
						nuovaSpecificaFrame.setVisible(true);
						azioni.setVisible(false);
					}					
				}				
			}
		});
		
		azioni.add(visualizzaMenuItem);
		azioni.add(modificaMenuItem);
		azioni.add(prorogaMenuItem);
		azioni.add(eliminaMenuItem);
		azioni.add(visualizzaSpecificheMenuItem);
		azioni.add(inserisciSpecificaMenuItem);
	}
	
	public TableContent getTableContent(){
		return tableContent;
	}
	
	public JTable getTable(){
		return table;
	}
	
	public DatabaseController getDatabaseController(){
		return databaseController;
	}
	
	public Contratto getSelectedContratto(){
		if(table.getSelectedRow() >= 0){
			return listaContrattiVisibili.get(table.getSelectedRow());
		}else{
			return null;
		}
	}
	
	public void refresh(){
		try{
			if(tableContent != null){
				
				if(tableContent.compareTo(TableContent.SCADENZE) == 0){
					listaContratti = databaseController.selectContrattiScadenza();					
				} else{
					listaContratti =  databaseController.selectContratti();
				}
				if(ricercaTextField.getText().length() != 0){
					ricerca();
				}else{
					listaContrattiVisibili = new Vector<Contratto>(listaContratti);
					table.setModel(new ContrattiTabelModel(listaContrattiVisibili));
					table.validate();
				}
				
			}
			
		} catch (DatabaseConnectionException ex) {
			// TODO: handle exception
		} catch (QueryException ex) {
			// TODO: handle exception
		}		
	}
	
	public void ricerca(){
		if(tableContent.compareTo(TableContent.SCADENZE) == 0){
			RicercaContrattoField selected = (RicercaContrattoField) ricercaComboBox.getSelectedItem();
			try{
				switch (selected) {
				case NUMERO:
					if(ricercaTextField.getText().length() == 0){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere vuoto", "", JOptionPane.WARNING_MESSAGE);								
					}else if(ricercaTextField.getText().length() > 15){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca deve essere lungo massimo 15 caratteri", "", JOptionPane.WARNING_MESSAGE);
						ricercaTextField.setText("");
						ricercaTextField.validate();
					}else{
						BigDecimal numeroSearch = new BigDecimal(ricercaTextField.getText());
						listaContrattiVisibili = new Vector<Contratto>();
						for(int i=0;i<listaContratti.size();i++){
							if(listaContratti.get(i).getNumero().compareTo(numeroSearch) == 0){
								listaContrattiVisibili.add(listaContratti.get(i));
							}
						}								
						table.setModel(new ContrattiTabelModel(listaContrattiVisibili));					
						table.validate();								
					}
					break;							
				case DITTA:							
					if(ricercaTextField.getText().length() == 0){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere vuoto", "", JOptionPane.WARNING_MESSAGE);								
					}else if(ricercaTextField.getText().length() > 30){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca deve essere lungo massimo 30 caratteri", "", JOptionPane.WARNING_MESSAGE);
						ricercaTextField.setText("");
						ricercaTextField.validate();
					}else{
						listaContrattiVisibili = new Vector<Contratto>();
						for(int i=0;i<listaContratti.size();i++){
							if(listaContratti.get(i).getDitta().equalsIgnoreCase(ricercaTextField.getText())){
								listaContrattiVisibili.add(listaContratti.get(i));
							}
						}
						table.setModel(new ContrattiTabelModel(listaContrattiVisibili));					
						table.validate();								
					}
					break;
				case DATA_INIZIO:
					if(ricercaTextField.getText().length() == 0){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere vuoto", "", JOptionPane.WARNING_MESSAGE);								
					}else if(ricercaTextField.getText().length() != 10){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere una data nel formato GG/MM/AAAA", "", JOptionPane.WARNING_MESSAGE);
						ricercaTextField.setText("");
						ricercaTextField.validate();
					}else{								
						listaContrattiVisibili = new Vector<Contratto>();
						for(int i=0;i<listaContratti.size();i++){
							if(dateFormat.format(listaContratti.get(i).getDataInizio()).equals(ricercaTextField.getText())){
								listaContrattiVisibili.add(listaContratti.get(i));
							}
						}
						table.setModel(new ContrattiTabelModel(listaContrattiVisibili));					
						table.validate();								
					}
					break;
				case DATA_SCADENZA:							
					if(ricercaTextField.getText().length() == 0){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere vuoto", "", JOptionPane.WARNING_MESSAGE);								
					}else if(ricercaTextField.getText().length() != 10){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere una data nel formato GG/MM/AAAA", "", JOptionPane.WARNING_MESSAGE);
						ricercaTextField.setText("");
						ricercaTextField.validate();
					}else{								
						listaContrattiVisibili = new Vector<Contratto>();
						for(int i=0;i<listaContratti.size();i++){
							if(dateFormat.format(listaContratti.get(i).getDataScadenza()).equals(ricercaTextField.getText())){
								listaContrattiVisibili.add(listaContratti.get(i));
							}
						}
						table.setModel(new ContrattiTabelModel(listaContrattiVisibili));					
						table.validate();								
					}
					break;
				case IMPORTO:							
					if(ricercaTextField.getText().length() == 0){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere vuoto", "", JOptionPane.WARNING_MESSAGE);								
					}else if(ricercaTextField.getText().length() > 15){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca deve essere lungo massimo 15 caratteri", "", JOptionPane.WARNING_MESSAGE);
						ricercaTextField.setText("");
						ricercaTextField.validate();
					}else{
						BigDecimal importoSearch = new BigDecimal(ricercaTextField.getText());
						listaContrattiVisibili = new Vector<Contratto>();
						for(int i=0;i<listaContratti.size();i++){
							if(listaContratti.get(i).getImporto().compareTo(importoSearch) == 0){
								listaContrattiVisibili.add(listaContratti.get(i));
							}
						}
						table.setModel(new ContrattiTabelModel(listaContrattiVisibili));					
						table.validate();								
					}
					break;
				case RIMANENZA:
					if(ricercaTextField.getText().length() == 0){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere vuoto", "", JOptionPane.WARNING_MESSAGE);								
					}else if(ricercaTextField.getText().length() > 15){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca deve essere lungo massimo 15 caratteri", "", JOptionPane.WARNING_MESSAGE);
						ricercaTextField.setText("");
						ricercaTextField.validate();
					}else{
						BigDecimal rimanenzaSearch = new BigDecimal(ricercaTextField.getText());
						listaContrattiVisibili = new Vector<Contratto>();
						for(int i=0;i<listaContratti.size();i++){
							if(listaContratti.get(i).getImporto().compareTo(rimanenzaSearch) == 0){
								listaContrattiVisibili.add(listaContratti.get(i));
							}
						}
						table.setModel(new ContrattiTabelModel(listaContrattiVisibili));					
						table.validate();								
					}
					break;
				case COMMENTO:
					if(ricercaTextField.getText().length() == 0){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere vuoto", "", JOptionPane.WARNING_MESSAGE);								
					}else if(ricercaTextField.getText().length() > 255){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca deve essere lungo massimo 255 caratteri", "", JOptionPane.WARNING_MESSAGE);
						ricercaTextField.setText("");
						ricercaTextField.validate();
					}else{
						listaContrattiVisibili = new Vector<Contratto>();
						for(int i=0;i<listaContratti.size();i++){
							if(listaContratti.get(i).getCommento().contains(ricercaTextField.getText())){
								listaContrattiVisibili.add(listaContratti.get(i));
							}
						}
						table.setModel(new ContrattiTabelModel(listaContrattiVisibili));					
						table.validate();								
					}
					break;
				default:
					break;
				}
			}catch (NumberFormatException ex) {
				JOptionPane.showMessageDialog(null, "Il campo di ricerca deve essere un numero", "", JOptionPane.WARNING_MESSAGE);
				ricercaTextField.setText("");
				ricercaTextField.validate();
			}
			
		}else{
			RicercaContrattoField selected = (RicercaContrattoField) ricercaComboBox.getSelectedItem();
			try{
				switch (selected) {
				case NUMERO:
					if(ricercaTextField.getText().length() == 0){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere vuoto", "", JOptionPane.WARNING_MESSAGE);								
					}else if(ricercaTextField.getText().length() > 15){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca deve essere lungo massimo 15 caratteri", "", JOptionPane.WARNING_MESSAGE);
						ricercaTextField.setText("");
						ricercaTextField.validate();
					}else{
						BigDecimal numeroSearch = new BigDecimal(ricercaTextField.getText());
						listaContrattiVisibili = new Vector<Contratto>();
						for(int i=0;i<listaContratti.size();i++){
							if(listaContratti.get(i).getNumero().compareTo(numeroSearch) == 0){
								listaContrattiVisibili.add(listaContratti.get(i));
							}
						}
						table.setModel(new ContrattiTabelModel(listaContrattiVisibili));					
						table.validate();								
					}
					break;							
				case DITTA:							
					if(ricercaTextField.getText().length() == 0){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere vuoto", "", JOptionPane.WARNING_MESSAGE);								
					}else if(ricercaTextField.getText().length() > 30){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca deve essere lungo massimo 30 caratteri", "", JOptionPane.WARNING_MESSAGE);
						ricercaTextField.setText("");
						ricercaTextField.validate();
					}else{
						listaContrattiVisibili = new Vector<Contratto>();
						for(int i=0;i<listaContratti.size();i++){
							if(listaContratti.get(i).getDitta().equalsIgnoreCase(ricercaTextField.getText())){
								listaContrattiVisibili.add(listaContratti.get(i));
							}
						}
						table.setModel(new ContrattiTabelModel(listaContrattiVisibili));					
						table.validate();								
					}
					break;
				case DATA_INIZIO:
					if(ricercaTextField.getText().length() == 0){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere vuoto", "", JOptionPane.WARNING_MESSAGE);								
					}else if(ricercaTextField.getText().length() != 10){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere una data nel formato GG/MM/AAAA", "", JOptionPane.WARNING_MESSAGE);
						ricercaTextField.setText("");
						ricercaTextField.validate();
					}else{								
						listaContrattiVisibili = new Vector<Contratto>();
						for(int i=0;i<listaContratti.size();i++){
							if(dateFormat.format(listaContratti.get(i).getDataInizio()).equals(ricercaTextField.getText())){
								listaContrattiVisibili.add(listaContratti.get(i));
							}
						}
						table.setModel(new ContrattiTabelModel(listaContrattiVisibili));					
						table.validate();								
					}
					break;
				case DATA_SCADENZA:							
					if(ricercaTextField.getText().length() == 0){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere vuoto", "", JOptionPane.WARNING_MESSAGE);								
					}else if(ricercaTextField.getText().length() != 10){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere una data nel formato GG/MM/AAAA", "", JOptionPane.WARNING_MESSAGE);
						ricercaTextField.setText("");
						ricercaTextField.validate();
					}else{								
						listaContrattiVisibili = new Vector<Contratto>();
						for(int i=0;i<listaContratti.size();i++){
							if(dateFormat.format(listaContratti.get(i).getDataScadenza()).equals(ricercaTextField.getText())){
								listaContrattiVisibili.add(listaContratti.get(i));
							}
						}
						table.setModel(new ContrattiTabelModel(listaContrattiVisibili));					
						table.validate();								
					}
					break;
				case IMPORTO:							
					if(ricercaTextField.getText().length() == 0){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere vuoto", "", JOptionPane.WARNING_MESSAGE);								
					}else if(ricercaTextField.getText().length() > 15){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca deve essere lungo massimo 15 caratteri", "", JOptionPane.WARNING_MESSAGE);
						ricercaTextField.setText("");
						ricercaTextField.validate();
					}else{
						BigDecimal importoSearch = new BigDecimal(ricercaTextField.getText());
						listaContrattiVisibili = new Vector<Contratto>();
						for(int i=0;i<listaContratti.size();i++){
							if(listaContratti.get(i).getImporto().compareTo(importoSearch) == 0){
								listaContrattiVisibili.add(listaContratti.get(i));
							}
						}
						table.setModel(new ContrattiTabelModel(listaContrattiVisibili));					
						table.validate();								
					}
					break;
				case RIMANENZA:
					if(ricercaTextField.getText().length() == 0){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere vuoto", "", JOptionPane.WARNING_MESSAGE);								
					}else if(ricercaTextField.getText().length() > 15){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca deve essere lungo massimo 15 caratteri", "", JOptionPane.WARNING_MESSAGE);
						ricercaTextField.setText("");
						ricercaTextField.validate();
					}else{
						BigDecimal rimanenzaSearch = new BigDecimal(ricercaTextField.getText());
						listaContrattiVisibili = new Vector<Contratto>();
						for(int i=0;i<listaContratti.size();i++){
							if(listaContratti.get(i).getImporto().compareTo(rimanenzaSearch) == 0){
								listaContrattiVisibili.add(listaContratti.get(i));
							}
						}
						table.setModel(new ContrattiTabelModel(listaContrattiVisibili));					
						table.validate();								
					}
					break;
				case COMMENTO:
					if(ricercaTextField.getText().length() == 0){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca non deve essere vuoto", "", JOptionPane.WARNING_MESSAGE);								
					}else if(ricercaTextField.getText().length() > 255){
						JOptionPane.showMessageDialog(null, "Il campo di ricerca deve essere lungo massimo 255 caratteri", "", JOptionPane.WARNING_MESSAGE);
						ricercaTextField.setText("");
						ricercaTextField.validate();
					}else{
						listaContrattiVisibili = new Vector<Contratto>();
						for(int i=0;i<listaContratti.size();i++){
							if(listaContratti.get(i).getCommento().contains(ricercaTextField.getText())){
								listaContrattiVisibili.add(listaContratti.get(i));
							}
						}
						table.setModel(new ContrattiTabelModel(listaContrattiVisibili));					
						table.validate();								
					}
					break;
				default:
					break;
				}
			}catch (NumberFormatException ex) {
				JOptionPane.showMessageDialog(null, "Il campo di ricerca deve essere un numero", "", JOptionPane.WARNING_MESSAGE);
				ricercaTextField.setText("");
				ricercaTextField.validate();
			}
		}
	}
	
	public Vector<Specifica> getSpecificheContratto() throws DatabaseConnectionException, QueryException{
		if(table.getSelectedRow() >= 0){
			return databaseController.selectSpecificheContratto(listaContrattiVisibili.get(table.getSelectedRow()));
		}else{
			return new Vector<Specifica>();
		}
		
	}
	
	
	
	
	
	
}
